package collection;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

/**
 * JDK8之后集合提供了流式API，提供了一个类:Stream
 * 操作模式类似于IO中的流式操作
 */
public class StreamAPIDemo1 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        Random random = new Random();
        for (int i = 0; i < 10; i++) {
            list.add(random.nextInt(10));
        }
        System.out.println(list);
        /*
            集合提供了一个方法:stream()，该方法会返回一个Stream实例
            Stream("流")，想象为流动，这里流动的是集合中的元素

            Stream提供了很多操作(这里有点像IO中的流连接中的高级流)
            中间环节:
            map:用于将集合中的每个元素进行处理，变成给定的lambda表达式处理后的元素
            filter:在流上添加一个过滤器，将满足过滤器要求的元素获取到
            distinct:去重，可以将流中的元素去重
            sorted:排序，可以对流中的元素进行排序

            终端环节
            collect:最终接收Stream处理完毕的所有数据
         */
        //将集合每个元素扩大3倍
        List<Integer> list2 = list.stream().map(e->e*3).collect(Collectors.toList());
        System.out.println("list2:"+list2);

        //收集list集合中的所有偶数
        List<Integer> list3 = list.stream().filter(e->e%2==0).collect(Collectors.toList());
        System.out.println("list3:"+list3);

        //去除list中的重复值
        List<Integer> list4 = list.stream().distinct().collect(Collectors.toList());
        System.out.println("list4:"+list4);

        //对list集合进行排序
//        List<Integer> list5 = list.stream().sorted().collect(Collectors.toList());
        //也可以在sorted中传入Comparator(lambda)自定义比较规则再排序
        List<Integer> list5 = list.stream().sorted((e1,e2)->e2-e1).collect(Collectors.toList());
        System.out.println("list5:"+list5);

        //对List集合元素每个扩大3倍，然后获取所有的偶数，并去除重复元素最后降序排序
        List<Integer> list6 = list.stream()
                                  .map(e->e*3)
                                  .filter(e->e%2==0)
                                  .distinct()
                                  .sorted((e1,e2)->e2-e1)
                                  .collect(Collectors.toList());
        System.out.println("list6:"+list6);

    }
}




